Skip to content
This repository was archived by the owner on Nov 17, 2023. It is now read-only.

[numpy] Shape support scalar tensor #14315

Merged
merged 2 commits into from
Mar 6, 2019

Conversation

reminisce
Copy link
Contributor

Description

This PR made necessary changes in the shape-related infra code to support scalars, aka, zero-dim tensors.
See this RFC for more information.

Implemented np.sum to verify the correctness with the following script.

After merging this PR, we can get started to make all the existing infer shape functions accommodate the new definition of empty shapes. Implementation of NumPy operators can be carried out in parallel.

Note that before we change all the existing infer functions to accommodate the new empty shape definition, the CI will fail without surprise. When we work on specific operators, we can test those locally to verify the correctness and submit PRs. After all the infer functions are revised, the CI should pass eventually. Then, we can merge the dev branch to the master.

import mxnet as mx
from mxnet import numpy as np


shape = (2, 2)
ret = np.sum(mx.nd.ones(shape))
print("Imperative invoke result==============")
print(ret)

data = mx.sym.var('data', shape=shape)
ret = mx.sym.numpy.sum(data)
exe = ret.simple_bind(ctx=mx.cpu(), data=(2, 2))
exe.forward(data=mx.nd.ones(shape))
print("Symbol bind result===============")
print(exe.outputs[0])

print("CachedOp result===============")
func = mx.nd.CachedOp(ret)
print(func(mx.nd.ones(shape)))
Imperative invoke result==============

4.0
<NDArray  @cpu(0)>
Symbol bind result===============

4.0
<NDArray  @cpu(0)>
CachedOp result===============

4.0
<NDArray  @cpu(0)>

@junrushao1994 @szha @eric-haibin-lin @zheng-da @yzhliu

@junrushao
Copy link
Member

Awesome work! Let’s work on this

@anirudhacharya
Copy link
Member

@mxnet-label-bot add [pr-awaiting-review]

@marcoabreu marcoabreu added the pr-awaiting-review PR is waiting for code review label Mar 4, 2019
@reminisce reminisce added the Numpy label Mar 4, 2019
@reminisce reminisce changed the title Shape support scalar tensor [numpy] Shape support scalar tensor Mar 4, 2019
@reminisce reminisce force-pushed the shape_support_scalar_tensor branch from bd866a2 to c5bac0b Compare March 6, 2019 04:53
@szha
Copy link
Member

szha commented Mar 6, 2019

Thanks for addressing my concerns

Copy link
Member

@szha szha left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after the above question is addressed.

@reminisce reminisce merged commit d8e9235 into apache:numpy Mar 6, 2019
reminisce added a commit that referenced this pull request Mar 13, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit that referenced this pull request Apr 4, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 5, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 5, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 5, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit that referenced this pull request Apr 6, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 10, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 11, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 12, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 13, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
reminisce added a commit to reminisce/mxnet that referenced this pull request Apr 15, 2019
* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set
szha pushed a commit that referenced this pull request Apr 16, 2019
* [numpy] Shape support scalar tensor (#14315)

* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set

* [Numpy] Change semantics of ndim for operators in `src/operator/contrib` (#14409)

* Initial commit

* Address comments

* [WIP] Use new shape definition (#14453)

* Init checkin

* Fix ndarray alloc bug

* Use TShape(0) as default empty tuple params

* Fix bugs

* Fix TShape init value

* Fix infer shape pass shape type and reshape infer shape func

* [numpy] Fix unit tests after introducing numpy compatible shapes (#14487)

* Fix infer shape rnn

* Fix boolean mask and custom op unit tests

* Fix multi proposal

* Fix diag

* Add global switch for backward compatibility and fix infer shape bugs

* Fix slice op infer shape

* Fix rnn infer shape

* Add util funcs for ndim_is_known and dim_size_is_known

* Revert rnn_cell.py

* Fix a bug to pass the test in test_contrib_rnn (#14520)

* fix.

* remove type conversion.

* remove type cast.

* [numpy] Fix test_dynamic_shape.test_dynamic_shape (#14538)

* Initial commit

* Address comments from Jun

* [numpy] Fix numpy import in python2 (#14537)

* Fix several test failures

* Fix subgraph op infer shape

* Fix sparse slice

* Fix deconv infer shape

* Fix numpy import compatibility problem in python2

* fix concat and slice (#14549)

* fix R-package (#14536)

* Fix cpp package build after using new shape definition (#14554)

* Fix pooling_v1 and deformable_convolution param initialization (#14577)

* Fix pooling_v1 param initialization

* Fix deformable_convolution param initialization

* [Numpy] Misc fix (#14612)

* [Numpy] Misc Fix

* fix build

* !shape_is_none => shape_is_known

* Address comments

* Fix

* [Numpy] fix test_operator_gpu.test_upsampling_bilinear_with_type (#14557)

* Fix test_operator_gpu.test_upsampling_bilinear_with_type

* Address comments

* [Numpy] Java/Scala modification (#14625)

* modify jni to support 0 dim/shape

* fix transpose axes default value

* fix shape index bug (#14630)

* fix jni lint (#14634)

* [numpy] Fix numpy branch failing tests in CI (#14639)

* Remove numpy namespaces for operator registration

* Fix bug when shape is compeltely unknown

* Fix singed/unsigned compare warning

* Fix CI

* Fix pylint

* Avoid launching gpu kernels for zero-size output tensors

* Fix test_ndarray

* Fix binary broadcast with zero-size tensors

* Better error message for infer shape failure in imperative

* Fix TShape constructor ambiguity on certain platforms

* Fix mkldnn build failure

* Fix build failure in gpu and cpp test

* Fix gpu cpp test build with mkldnn

* Fix mkldnn cpp test

* Fix concatenating zero-size tensors

* Avoid letting mkldnn handle zero-size tensors in concat

* Fix quantized_concat infer shape

* Try to fix perl c api

* fix invalid ndarray dispose (#14657)

* swig fixes for the changes in c_api.h (#14655)

* Rename np_comp to np_compat for readability

* Fix import error

* Keep old c apis unchanged

* Fix lint

* Rebase and fix build

* Fix R build failure

* Fix Perl build failure

* Rebase with master

* Address cr comments

* Use just one scope to represent numpy compatibility

* Add code comment to NumpyScope object in Scala

* Add use_np_compat decorator

* Fix pylint
kedarbellare pushed a commit to kedarbellare/incubator-mxnet that referenced this pull request Apr 20, 2019
* [numpy] Shape support scalar tensor (apache#14315)

* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set

* [Numpy] Change semantics of ndim for operators in `src/operator/contrib` (apache#14409)

* Initial commit

* Address comments

* [WIP] Use new shape definition (apache#14453)

* Init checkin

* Fix ndarray alloc bug

* Use TShape(0) as default empty tuple params

* Fix bugs

* Fix TShape init value

* Fix infer shape pass shape type and reshape infer shape func

* [numpy] Fix unit tests after introducing numpy compatible shapes (apache#14487)

* Fix infer shape rnn

* Fix boolean mask and custom op unit tests

* Fix multi proposal

* Fix diag

* Add global switch for backward compatibility and fix infer shape bugs

* Fix slice op infer shape

* Fix rnn infer shape

* Add util funcs for ndim_is_known and dim_size_is_known

* Revert rnn_cell.py

* Fix a bug to pass the test in test_contrib_rnn (apache#14520)

* fix.

* remove type conversion.

* remove type cast.

* [numpy] Fix test_dynamic_shape.test_dynamic_shape (apache#14538)

* Initial commit

* Address comments from Jun

* [numpy] Fix numpy import in python2 (apache#14537)

* Fix several test failures

* Fix subgraph op infer shape

* Fix sparse slice

* Fix deconv infer shape

* Fix numpy import compatibility problem in python2

* fix concat and slice (apache#14549)

* fix R-package (apache#14536)

* Fix cpp package build after using new shape definition (apache#14554)

* Fix pooling_v1 and deformable_convolution param initialization (apache#14577)

* Fix pooling_v1 param initialization

* Fix deformable_convolution param initialization

* [Numpy] Misc fix (apache#14612)

* [Numpy] Misc Fix

* fix build

* !shape_is_none => shape_is_known

* Address comments

* Fix

* [Numpy] fix test_operator_gpu.test_upsampling_bilinear_with_type (apache#14557)

* Fix test_operator_gpu.test_upsampling_bilinear_with_type

* Address comments

* [Numpy] Java/Scala modification (apache#14625)

* modify jni to support 0 dim/shape

* fix transpose axes default value

* fix shape index bug (apache#14630)

* fix jni lint (apache#14634)

* [numpy] Fix numpy branch failing tests in CI (apache#14639)

* Remove numpy namespaces for operator registration

* Fix bug when shape is compeltely unknown

* Fix singed/unsigned compare warning

* Fix CI

* Fix pylint

* Avoid launching gpu kernels for zero-size output tensors

* Fix test_ndarray

* Fix binary broadcast with zero-size tensors

* Better error message for infer shape failure in imperative

* Fix TShape constructor ambiguity on certain platforms

* Fix mkldnn build failure

* Fix build failure in gpu and cpp test

* Fix gpu cpp test build with mkldnn

* Fix mkldnn cpp test

* Fix concatenating zero-size tensors

* Avoid letting mkldnn handle zero-size tensors in concat

* Fix quantized_concat infer shape

* Try to fix perl c api

* fix invalid ndarray dispose (apache#14657)

* swig fixes for the changes in c_api.h (apache#14655)

* Rename np_comp to np_compat for readability

* Fix import error

* Keep old c apis unchanged

* Fix lint

* Rebase and fix build

* Fix R build failure

* Fix Perl build failure

* Rebase with master

* Address cr comments

* Use just one scope to represent numpy compatibility

* Add code comment to NumpyScope object in Scala

* Add use_np_compat decorator

* Fix pylint
haohuanw pushed a commit to haohuanw/incubator-mxnet that referenced this pull request Jun 23, 2019
* [numpy] Shape support scalar tensor (apache#14315)

* Support scalar and zero-size tensors with np.sum

* Add sanity check when ndim is set

* [Numpy] Change semantics of ndim for operators in `src/operator/contrib` (apache#14409)

* Initial commit

* Address comments

* [WIP] Use new shape definition (apache#14453)

* Init checkin

* Fix ndarray alloc bug

* Use TShape(0) as default empty tuple params

* Fix bugs

* Fix TShape init value

* Fix infer shape pass shape type and reshape infer shape func

* [numpy] Fix unit tests after introducing numpy compatible shapes (apache#14487)

* Fix infer shape rnn

* Fix boolean mask and custom op unit tests

* Fix multi proposal

* Fix diag

* Add global switch for backward compatibility and fix infer shape bugs

* Fix slice op infer shape

* Fix rnn infer shape

* Add util funcs for ndim_is_known and dim_size_is_known

* Revert rnn_cell.py

* Fix a bug to pass the test in test_contrib_rnn (apache#14520)

* fix.

* remove type conversion.

* remove type cast.

* [numpy] Fix test_dynamic_shape.test_dynamic_shape (apache#14538)

* Initial commit

* Address comments from Jun

* [numpy] Fix numpy import in python2 (apache#14537)

* Fix several test failures

* Fix subgraph op infer shape

* Fix sparse slice

* Fix deconv infer shape

* Fix numpy import compatibility problem in python2

* fix concat and slice (apache#14549)

* fix R-package (apache#14536)

* Fix cpp package build after using new shape definition (apache#14554)

* Fix pooling_v1 and deformable_convolution param initialization (apache#14577)

* Fix pooling_v1 param initialization

* Fix deformable_convolution param initialization

* [Numpy] Misc fix (apache#14612)

* [Numpy] Misc Fix

* fix build

* !shape_is_none => shape_is_known

* Address comments

* Fix

* [Numpy] fix test_operator_gpu.test_upsampling_bilinear_with_type (apache#14557)

* Fix test_operator_gpu.test_upsampling_bilinear_with_type

* Address comments

* [Numpy] Java/Scala modification (apache#14625)

* modify jni to support 0 dim/shape

* fix transpose axes default value

* fix shape index bug (apache#14630)

* fix jni lint (apache#14634)

* [numpy] Fix numpy branch failing tests in CI (apache#14639)

* Remove numpy namespaces for operator registration

* Fix bug when shape is compeltely unknown

* Fix singed/unsigned compare warning

* Fix CI

* Fix pylint

* Avoid launching gpu kernels for zero-size output tensors

* Fix test_ndarray

* Fix binary broadcast with zero-size tensors

* Better error message for infer shape failure in imperative

* Fix TShape constructor ambiguity on certain platforms

* Fix mkldnn build failure

* Fix build failure in gpu and cpp test

* Fix gpu cpp test build with mkldnn

* Fix mkldnn cpp test

* Fix concatenating zero-size tensors

* Avoid letting mkldnn handle zero-size tensors in concat

* Fix quantized_concat infer shape

* Try to fix perl c api

* fix invalid ndarray dispose (apache#14657)

* swig fixes for the changes in c_api.h (apache#14655)

* Rename np_comp to np_compat for readability

* Fix import error

* Keep old c apis unchanged

* Fix lint

* Rebase and fix build

* Fix R build failure

* Fix Perl build failure

* Rebase with master

* Address cr comments

* Use just one scope to represent numpy compatibility

* Add code comment to NumpyScope object in Scala

* Add use_np_compat decorator

* Fix pylint
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Numpy pr-awaiting-review PR is waiting for code review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants